package common.mq.register.service;

import java.util.ArrayList;
import java.util.List;

import common.mq.persistence.service.IPersistenceService;
import common.mq.register.po.Consumer;
import common.mq.register.po.Event;
import common.mq.register.po.MessageBase;

public interface IRegisterService {

	public void setListeners(List<IListener> listeners);
	
	public void setPersistenceService(IPersistenceService persistenceService);

	/**
	 * 通知观察者
	 * 
	 * @param param
	 */
	public void notifyAll(Object param, Event e);

	/**
	 * 根据消息类型查找元消息
	 * 
	 * @param category
	 * @return
	 */
	public MessageBase getMessageBase(String category);

	/**
	 * 查找元消息对应的消费者列表（消息类型与元消息一一对应）
	 * 
	 * @param category
	 * @return
	 */
	public ArrayList<Consumer> getConsumers(String category);
	
	/**
	 * 根据消费者ID查找消费者
	 * @param consumerId
	 * @return
	 */
	public Consumer getConsumer(Integer consumerId) ;
	
	/**
	 * 增加注册用户
	 * @param caller
	 * @return
	 */
	public boolean addCaller(String caller);
	
	/**
	 * 删除注册用户
	 * @param caller
	 * @return
	 */
	public boolean removeCaller(String caller);

	/**
	 * 检查用户是否已注册
	 * 
	 * @param uid
	 * @return
	 */
	public boolean isUidExist(String caller);
	
	/**
	 * 增加元消息
	 * @param mb
	 * @return
	 */
	public boolean addMessageBase(MessageBase mb);
	
	/**
	 * 删除元消息
	 * @param category
	 * @return
	 */
	public boolean removeMessageBase(String category);

	/**
	 * 判断该元消息是否已注册
	 * 
	 * @param category
	 * @return
	 */
	public boolean hasRegister(String category);
	
	/**
	 * 增加消费者
	 * @param consumer
	 * @return
	 */
	public boolean addConsumer(Consumer consumer);
	
	/**
	 * 删除消费者
	 * @param consumerId
	 * @return
	 */
	public boolean removeConsumer(Integer consumerId);

	/**
	 * 系统启动时从数据库加载注册信息到缓存
	 */
	public void loadData();
	
	public void loadConsumer();
}
